<?php 
namespace app\admin\controller;
use think\Controller;

class Comm extends Controller{
	public $default = [	//定义登陆后不需要权限也能访问的控制器方法


		'Indexindex'


	];
	public $left;
	public function __construct(){
		parent::__construct();
		//rabc权限设置
		//如果不是登录页面，判断是否登录
		$controller = request()->controller();
		$action = request()->action();
		$arr = ['Loginlogin','Registeruser','Loginlogout','Logindo_login'];
		if(!in_array($controller.$action,$arr)){	//判断是否不是登录页面或者是注册页面
			if(session('?uname') == false){		///如果不是注册页面或者登录页面,判断是否登录
				//dump(session(''));
				$this->redirect('/admin/login/login');
			}else{
				//显示左侧菜单
				$uname = session('uname');
				
				$info = model('Member')
				->alias('m')
				->join('group g','m.gid=g.gid && m.uname="'.$uname.'"')
				->select();
				
				foreach($info as $v){
					$rid = $v->rid;
				}
				$arr = explode(',',$rid); //有权限的rid
				$role = model('Role');
				//读取一级分类
				$ff = [];
				foreach($arr as $k=>$v){
					$f[] = $role->where('fid=0 && rid="'.$v.'"')->order('controller')->select();
					if($f[$k] == []){
						unset($f[$k]);
					}
				}
				$data = null;
				foreach($f as $v){
					foreach($v as $vv){
						$data_f[] = $vv->toArray();	//能够访问的一级分类--控制器
						$data_k[] = ucfirst($vv->controller).$vv->action; //能访问的一级控制器名称+方法名
						$r[] = $vv->rid;
					}
				}
				// dump($data_f);exit;
				$arr = array_diff($arr,$r);//能訪問的二級方法 rid數組

				//根据一级分类读取能訪問的二级分类 
				foreach($data_f as $k=>$v){
					$data[$data_f[$k]['rname']] = $role->where('fid="'.$v['rid'].'"')->select();
				}
				foreach($data as $k=>$v){
					foreach($v as $vv){
						if($vv->type == 0){	//控制是否顯示
							$tmp = $vv->toArray();
							$new[$k][] = $tmp;
						}
						if(in_array($vv->rid,$arr)){
							$data_k[] = ucfirst($vv->controller).$vv->action; //能访问的二级控制器名称+方法名
						}
					}
				}
				//实时判断当前访问的控制器和方法是否具有权限访问
				$data_k = array_merge($this->default,$data_k);
				if(!in_array($controller.$action,$data_k)){
					$this->error('你没权限访问本页面');
				}
				$this->left = $new;
				$this->getLeft();
				$this->getInfo();
			}
		}
		

		//如果没有登录则不能进入除了登录页面的别的页面
		//如果已经登录则去查看当前用户所拥有的左侧菜单

		//实时判断当前访问的控制器和方法是否具有权限访问
	}
	//显示左侧菜单
	public function getLeft(){	
		// dump($this->left);exit;
		$this->assign('left',$this->left);
	}

	//显示登录注册注销状态等数据 组信息
	public function getInfo(){
		$info = model('Member')
        ->alias('a')
        ->join('group g','a.gid=g.gid && a.uname="'.session('uname').'"')
        ->select();
        $gname = $info[0]->gname;
        $this->assign('gname',$gname);
	}
}